package com.example.service;

import com.example.common.Result;
import com.example.dto.WorkScheduleDateDTO;
import com.example.vo.WorkScheduleDateVO;

import java.time.LocalDate;
import java.util.List;

/**
 * 日期排班服务接口
 */
public interface WorkScheduleDateService {
    
    /**
     * 添加日期排班
     */
    Result<Void> addWorkScheduleDate(WorkScheduleDateDTO workScheduleDateDTO);
    
    /**
     * 更新日期排班
     */
    Result<Void> updateWorkScheduleDate(Long id, WorkScheduleDateDTO workScheduleDateDTO);
    
    /**
     * 删除日期排班
     */
    Result<Void> deleteWorkScheduleDate(Long id);
    
    /**
     * 根据ID查询日期排班详情
     */
    Result<WorkScheduleDateVO> getWorkScheduleDateById(Long id);
    
    /**
     * 获取当前店长的日期排班列表
     */
    Result<List<WorkScheduleDateVO>> getMyWorkScheduleDates();
    
    /**
     * 根据日期获取当前店长的日期排班列表
     */
    Result<List<WorkScheduleDateVO>> getMyWorkScheduleDatesByDate(LocalDate scheduleDate);
    
    /**
     * 根据日期范围获取当前店长的日期排班列表
     */
    Result<List<WorkScheduleDateVO>> getMyWorkScheduleDatesByDateRange(LocalDate startDate, LocalDate endDate);
    
    /**
     * 批量设置日期排班
     */
    Result<Void> batchSetWorkScheduleDates(List<WorkScheduleDateDTO> workScheduleDateDTOs);
    
    /**
     * 清空指定日期的排班
     */
    Result<Void> clearScheduleByDate(LocalDate scheduleDate);
    
    /**
     * 获取指定日期的已排班时间段（用于前端时间选择过滤）
     */
    Result<List<Integer[]>> getOccupiedTimeSlotsForDate(LocalDate scheduleDate);
    
    /**
     * 从周排班模板复制到指定日期
     */
    Result<Void> copyFromWeeklyTemplate(LocalDate scheduleDate);
} 